class ListNode {
    int val;
    ListNode next;
    ListNode(int x) {
        val = x;
        next = null;
    }
}

public class CircularLinkedList {
    public static boolean hasCycle(ListNode head) {
        ListNode p = head;  // 快指针
        ListNode t = head;  // 慢指针

        while (p != null && p.next != null) {
            p = p.next.next;
            t = t.next;

            // 如果快指针和慢指针相遇，说明链表中存在环
            if (p == t) {
                return true;
            }
        }

        return false;
    }

    public static void main(String[] args) {
        // 创建链表 1->2->3->4->2（环）
        ListNode node1 = new ListNode(1);
        ListNode node2 = new ListNode(2);
        ListNode node3 = new ListNode(3);
        ListNode node4 = new ListNode(4);

        node1.next = node2;
        node2.next = node3;
        node3.next = node4;
        node4.next = node2;  // 创建环

        boolean hasCycle = hasCycle(node1);
        System.out.println("链表是否存在环: " + hasCycle); // 输出 true
    }
}